Rust hiện đại tận dụng lập trình hàm các nguyên tắc để cung cấp các trừu tượng không tốn kém. Bằng cách xem các hàm như giá trị và dữ liệu như luồng bất biến, Rust cho phép thực hiện các thao tác I/O mang tính biểu đạt thao tác nhập/xuất mà không đánh đổi hiệu suất.
1. Môi trường và các hàm đóng gói (Closures)
Khác với các hàm tiêu chuẩn, các hàm đóng gói có thể Thu thập môi trường của chúng. Chúng sử dụng các Fn, FnMut, hoặc FnOnce đặc điểm để quản lý chuyển giao quyền sở hữu trong các hàm đóng gói, đảm bảo an toàn bộ nhớ được duy trì ngay cả khi các hàm mang theo trạng thái.
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter là tham chiếu trễ và chưa thực thi!
2. Các luồng khai báo
Bằng cách sử dụng các bộ thích nghi vòng lặp (Iterator Adaptors), các nhà phát triển thay thế các vòng lặp lồng nhau dài dòng bằng logic ngắn gọn. Phương thức iter_mut cho phép thực hiện các biến đổi chức năng an toàn tại chỗ, trong khi trình biên dịch tối ưu các lời gọi cấp cao này thành mã máy tương đương với các vòng lặp viết tay.
3. Các bài kiểm tra hiệu suất
Khi được biên dịch ở chế độ phát triển (dev profile) hoặc phát hành, hàm search chứng minh hiệu quả của nó. Các bài kiểm tra thống kê cho thấy: test bench_search_iter ... bench: 19.234.900 ns/iter. Điều này xác nhận rằng các trừu tượng này thực sự là không tốn kém.
collect() hoặc sum().